#pragma GCC optimize(2)
#include <iostream>
#include <queue>
#include <map>
#include <unordered_map>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
#include <set>
#include <unordered_set>
#define IOS ios::sync_with_stdio(false), cin.tie(0), cout.tie(0)
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int,int> pii;
int a[50];
struct node
{
	int a;
	int b;
}k[50];
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		int f=0;
		int p=0;
		int idx=0;
		for(int i=1;i<=n;i++)
		{
			cin>>a[i];
			if(a[i]>=1)
			{
				f=1;
				p=i;
			}
			
		}
		if(f)
		{
			while(a[p]<=20)
			{
				idx++;
				k[idx]={p,p};
				a[p]=a[p]*2;
//				cout<<a[p]<<endl;
			}
			for(int i=1;i<=n;i++)
			{
				idx++;
				k[idx]={i,p};
				a[i]+=a[p];
			}
			for(int i=1;i<n;i++)
			{
				if(a[i]>a[i+1])
				{
					idx++;
					k[idx]={i+1,i};
					a[i+1]+=a[i];
				}
			}
		}
		else
		{
			for(int i=n;i>=2;i--)
			{
				if(a[i]<a[i-1])
				{
					idx++;
					k[idx]={i-1,i};
					a[i-1]+=a[i];
				}
			}
		}
		cout<<idx<<endl;
		for(int i=1;i<=idx;i++)
		{
			cout<<k[i].a<<' '<<k[i].b<<endl;
		}
	}

	return 0;
}

